#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

#include <pthread.h>

typedef struct 
{
    unsigned char *ptr; // 缓存区指针
    int total_size; // 总大小
    int offset; // 缓存数据起始位置的偏移量
    int len;    // 缓存数据长度
    pthread_mutex_t lock; // 缓存读取的互斥锁
} Buffer;

/**
 * @brief 初始化缓存区
 * @param size 缓存区大小
 * @return Buffer* 缓存区指针
 */
Buffer *app_buffer_init(int size);

/**
 * @brief 释放缓存区
 * @param buffer 缓存区指针
 * @return int 0:成功 -1:失败
 */
int app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓存区写入数据
 * @param buffer 缓存区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return int 0:成功 -1:失败
 */
int app_buffer_write(Buffer *buffer, unsigned char *data, int len);

/**
 * @brief 从缓存区读取数据
 * @param buffer 缓存区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return int 读取的数据长度
 */
int app_buffer_read(Buffer *buffer, unsigned char *data, int len);

#endif // __APP_BUFFER_H
